package com.zixuan.gulicollege.common_utils;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @ClassName OrderNumberUtils
 * @Author by zixuan
 * @Date 2021/5/27 14:20
 */

public class OrderNumberUtils {

    /**
     * 静态对象
     */
    private static volatile OrderNumberUtils orderNumberUtils;

    /**
     * 全局自增数
     */
    private static int count = 0;

    /**
     * 格式化日期
     */
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

    /**
     * 记录上一次的时间判断是否需要全局自增数
     */
    private static String nowDateStr;

    /**
     * 每秒最多生成订单数量
     */
    private static final int total = 9999;

    /**
     * 私有化构造器
     */
    private OrderNumberUtils(){}

    /**
     * 单列模式只返回一个orderNumberUtils对象
     * @return 单列模式只返回一个orderNumberUtils对象
     */
    public static OrderNumberUtils getInstance() {
        if (orderNumberUtils == null) {
            synchronized (OrderNumberUtils.class) {
                if (orderNumberUtils == null) {
                    orderNumberUtils = new OrderNumberUtils();
                }
            }
        }
        return orderNumberUtils;
    }

    /**
     * 生成String类型时间
     * @return
     */
    private static String getNowDateString() {
        return sdf.format(new Date());
    }

    /**
     * 生成订单号
     * @return 返回订单号
     */
    public synchronized String GenerateOrder() {
        String dateStr = getNowDateString();
        if (dateStr.equals(nowDateStr)) {
            count++;
        } else {
            count = 1;
            nowDateStr = dateStr;
        }
        // 算补位
        int countInteger = String.valueOf(total).length() - String.valueOf(count).length();
        // 补字符串
        StringBuilder bu = new StringBuilder();
        for (int i = 0; i < countInteger; i++) {
            bu.append("0");
        }
        bu.append(count);
        if (count >= total) {
            count = 0;
        }

        return dateStr + bu;
    }

}
